package string;

/**
 * String的特点
 * java建议使用字面量形式创建字符串对象，并且使用相同字面量是会重用对象
 */
public class StringDemo {
    public static void main(String[] args) {
          String s1 = "123abc";
          String s2 = "123abc";
          //==是“值”比较，引用比较
          System.out.println(s1 == s2);//地址相同说明什么?说明使用同一个对象
          String s3 = "123abc";
          System.out.println(s1 == s3);//true
          String s4 = new String("123abc");//new一定产生新对象
          System.out.println(s1 == s4);//false 地址不同，说明不是同一个对象
          /*
              触发了编译器的预计算特性
              当一个计算表达式运算符两侧都是字面量时，则会进行计算，并将结果
              替换该表达式
           */
          String s5 = "123"+"abc";//class文件中代码为:String s5 = "123abc";
          System.out.println(s1 == s5);

          String s = "123";
          //拼接会产生新对象，并且不会缓存在常量池中
          String s6 = s + "abc";
          System.out.println(s1 == s6);


          s1 = s1+"!";
          System.out.println(s1);//123abc!
          System.out.println(s2);//?
          System.out.println(s3);//?

    }
}





